package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式---> ()->{} 【接口/抽象类--匿名内部类】
 *                         【集合遍历--匿名内部类】
 * Collection--->List:存重复元素并且有序【保存数据结构一致】
 *               Set：存无序并却不重复【保存数据结构一致】
 *               Queue：队列结合业务
 * Map------------->HashMap:键值对存值
 */
    public class LambdaDemo {
    @Test
    public void testList(){
    //List集合：保存元素
    List<String> list=new ArrayList<>();
    list.add("白洋淀");
    list.add("正定古城");
    list.add("河头老街");
    list.add("白石山");
    //集合3种遍历方式:普通for，增强for，支持forEach方法
    for (String str:list){
    System.out.println("增强for："+str);
    }
    //支持forEach方法：遍历集合元素
    // Consumer针对List集合接口:功能获取list集合元素
    list.forEach(new Consumer<String>(){
    public void accept(String s) {
    System.out.println("consumer接口遍历方案："+s);
    }
    });
    //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
    //编写Lambda表达式写法
    list.forEach(s-> System.out.println("Lambda遍历方案："+s));
    }

    @Test
    public void testMap(){
    //创建Map集合
    Map<Integer,String> map=new HashMap<>();
    map.put(1,"唐山");
    map.put(2,"石家庄");
    map.put(3,"秦皇岛");
    map.put(4,"邯郸");
    //遍历集合：普通for，增强for，forEach(BiConSummer接口--匿名内部类)
    //键值对--->一组Entry对象
    //BiConSummer 接口--获取每组Entry对象---accept()获取Entry对象
    map.forEach(new BiConsumer<Integer, String>() {

        public void accept(Integer integer, String s) {
            System.out.println("键："+integer+"值："+s);
        }
    });
    //使用Lambda表达式
    map.forEach((i,s)-> System.out.println("Lambda值："+s));
    }
    /**
     * 作业：   1.使用Lambda表达式完成Thread线程创建    看TR
     *         2.使用Lambda表达式完成Runnable线程创建  看TR
     *         3.IO流--File类：listFile(File Filter 接口)【5行代码】
     *         目标：【io包下FilterAPI类】实现使用Lambda表达式完成
     *         4.IO流--File类：listFile(FileFilter接口)【2行代码】
     *         目标：【io包下FilterAPI类】实现使用Lambda表达式完成
     *         5.集合:改成Lambda写法
     *         目标：【list包下ListAPI类下单元测试：testComparator()】
     *         LambdaDemo类下--完成作业
     *         @LambdaHomeWork1
     *         @LambdaHomeWork2   ....
     *         提交11.8.12.00之前
     */
    @Test
    public void LambdaHomeWork1(){
    //使用Lambda表达式完成Thread线程创建
    //Thread类 Java定义线程类--具备启动start---
     //Thread类封装 Runnable类--线程run运行
    Thread t1=new Thread(()->{for (int i=0;i<1000;i++){
        System.out.println("给我学的啊，一愣一愣的");
    }});
     t1.start();
    }
    @Test
    public void LambdaHomeWork2(){
    Runnable mr1=()->{for (int i=0;i<1000;i++){
        System.out.println("时间不等人，但我等你");
    }};
    //2.创建Thread线程类---start()
    Thread t2=new Thread(mr1);
    //3.启动线程
    t2.start();
    }
    @Test
    public void LambdaHomeWork3(){
    FileFilter my = new FileFilter() {
    public boolean accept(File pathname) {
    String name = pathname.getName();
    System.out.println("过滤出来文件夹名字是：" + name);
    return pathname.getName().startsWith("s");
    }
    };
    }
    @Test
    public void LambdaHomeWork4(){
    for(File f: new File("." + File.separator ).listFiles((pathname)->{return pathname.getName().startsWith("b");})){
    System.out.println("遍历后过滤完成："+f);
        }
    }
    @Test
    public void LambdaHomeWork5(){
    List<String> list=new ArrayList<>();
    list.add("卫昭");
    list.add("周生辰");
    list.add("嗨放小超");
    Comparator<String> com=Comparator.comparingInt(String::length);
    Collections.sort(list,com);
    System.out.println("排序后的集合"+list);
    }




    }



